package com.br.jhone.accfc.util;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

import com.br.jhone.accfc.pojo.Item;
import com.br.jhone.accfc.pojo.Serie;
import com.br.jhone.accfc.pojo.Tipo;

public class DBUtil {

	private static class DatabaseHelper extends SQLiteOpenHelper {
		DatabaseHelper(Context context){
			super(context, Cons.NOME_BANCO, null, Cons.VERSAO_BANCO);
		}

		@Override
		public void onCreate(SQLiteDatabase db) {
			db.execSQL(Cons.SQL_CRIAR_TABELA_TIPO);
			db.execSQL(Cons.SQL_CRIAR_TABELA_ITEM);
			db.execSQL(Cons.SQL_CRIAR_TABELA_SERIES);
			for(Tipo t : InsertTipo.listaTipos){
				ContentValues values = new ContentValues();
				values.put(Cons.CAMPO_ID, t.getId());
				values.put(Cons.CAMPO_NOME, t.getNome());
				if(db.insert(Cons.TABELA_TIPO, null, values) < 0){
					Log.i("","erro "+t.toString());
				}
			}
			for(Serie s : InsertSeries.listaSeries){
				ContentValues values = new ContentValues();
				values.put(Cons.CAMPO_ID, s.getId());
				values.put(Cons.CAMPO_NOME, s.getNome());
				if(db.insert(Cons.TABELA_SERIE, null, values) < 0){
					Log.i("","erro "+s.getNome());
				}
			}
			for(Item i : InsertItens.listaMoveis){
				ContentValues values = new ContentValues();
				values.put(Cons.CAMPO_ID_TIPO, i.getTipo().getId());
				values.put(Cons.CAMPO_ID_SERIE, i.getSerie().getId());
				values.put(Cons.CAMPO_NOME, i.getNome());
				if(db.insert(Cons.TABELA_ITEM, null, values) < 0){
					Log.i("","erro "+i.getNome());
				}
			}
			UtilACCFC.inserirItens(db, InsertItens.listaPapelDeParede);
			UtilACCFC.inserirItens(db, InsertItens.listaPiso);
			UtilACCFC.inserirItens(db, InsertItens.listaRoupa);
			UtilACCFC.inserirItens(db, InsertItens.listaGuardaChuva);
		
		}

		@Override
		public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
			UtilACCFC.inserirItens(db, InsertItens.listaAcessorio);
			UtilACCFC.inserirItens(db, InsertItens.listaPapel);
			UtilACCFC.inserirItens(db, InsertItens.listaGyroid);
			UtilACCFC.inserirItens(db, InsertItens.listaFossil);
			UtilACCFC.inserirItens(db, InsertItens.listaQuadro);
			UtilACCFC.inserirItens(db, InsertItens.listaMusica);
			UtilACCFC.inserirItens(db, InsertItens.listaPhineas);
			UtilACCFC.inserirItens(db, InsertItens.listaFruta);
			UtilACCFC.inserirItens(db, InsertItens.listaFerramenta);
			UtilACCFC.inserirItens(db, InsertItens.listaFlor);
			UtilACCFC.inserirItens(db, InsertItens.listaPeixe);
			UtilACCFC.inserirItens(db, InsertItens.listaInseto);
			UtilACCFC.inserirItens(db, InsertItens.listaDLC);
			UtilACCFC.inserirItens(db, InsertItens.listaOutros);
		}
		
	}
	private DatabaseHelper mDbHelper;
	private SQLiteDatabase mDb;
	
	private final Context mContext;
	
	public DBUtil(Context context){
		this.mContext = context;
		open();
	}
	
	private void open() {
		if(mDbHelper == null){
			mDbHelper = new DatabaseHelper(mContext);
			mDb = mDbHelper.getWritableDatabase();
		}
	}
	
	public void close(){
		mDbHelper.close();
	}
	
	public Cursor listarItens(String nome) {
		if(nome != null && !nome.isEmpty()){
			return mDb.query(Cons.TABELA_ITEM, new String[]{Cons.CAMPO_ID, Cons.CAMPO_NOME, Cons.CAMPO_ID_TIPO, Cons.CAMPO_POSSUI}, Cons.CAMPO_NOME+" like '"+nome+"%'", null, null, null, null);
		}else{
			return null;
		}
	}

	public Item marcarItem(int id) {
		Item i = obterItem(id);
		if(i.getPossui()){
			i.setPossui(false);
		}else{
			i.setPossui(true);
		}
		ContentValues values = new ContentValues();
		values.put(Cons.CAMPO_POSSUI, i.getPossui());
		mDb.update(Cons.TABELA_ITEM, values, Cons.CAMPO_ID+"="+i.getId(), null);
		return i;
	}

	private Item obterItem(int id) {
		Cursor c = mDb.query(Cons.TABELA_ITEM, new String[]{Cons.CAMPO_ID, Cons.CAMPO_NOME, Cons.CAMPO_ID_TIPO, Cons.CAMPO_POSSUI},
				Cons.CAMPO_ID+"="+id, null , null, null, null);
		c.moveToFirst();
		Item i = new Item();
		i.setId(c.getInt(c.getColumnIndex(Cons.CAMPO_ID)));
		i.setNome(c.getString(c.getColumnIndex(Cons.CAMPO_NOME)));
		i.setPossui(c.getInt(c.getColumnIndex(Cons.CAMPO_POSSUI))>0);
		Tipo t = new Tipo();
		t.setId(c.getInt(c.getColumnIndex(Cons.CAMPO_ID_TIPO)));
		i.setTipo(t);
		return i;
	}

}
